﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.Xna.Framework;

namespace ArcannEngine
{
    // Baza dla wszystkich dziedziczacych menadzerow
    // Zawiera referencje do obiektu gry oraz jej nazwe
    // Definicje funkcji wirtualnych, ktore kazdy menadzer musi zaimplmenetowac
    public abstract class Manager
    {
        private RocketGame game;
        public RocketGame Game
        {
            get { return this.game; }
        }

        // W metodzie wywolanie funkcji abstrakcyjnej, bo nazwa menadzera
        // okreslana jest przez klase dziedziczaca, a nie bazowa Manager
        public String Name
        {
            get { return this.GetName(); }
        }
 
        public Manager(RocketGame game)
        {
            this.game = game;
        }
 
        public virtual void LoadContent() {}
        public virtual void UnloadContent() {}
        public virtual void Update(GameTime gameTime) {}
        public virtual void Draw(GameTime gameTime) {}

        // Kazdy menadzer wywola ta funkcje przy tworzeniu samego siebie,
        // wiec obiekt gry bedzie mial zapisywane wszystkie wykorzystywane menadzery
        protected virtual void Initialize()
        {
            this.game.AddManager(this);
        }        
 
        protected abstract String GetName();
    }
}